#pragma once
class CCharacter;
class CPC;


class CPCClientUpdater
{
	/* this+0 */ public: //const CPCClientUpdater::`vftable'
	/* this+4 */ public: unsigned char m_disconnectType;
	/* this+8 */ private: CPC* m_pc;

	public: CPCClientUpdater::CPCClientUpdater(void);
	public: virtual CPCClientUpdater::~CPCClientUpdater(void);
	public: void CPCClientUpdater::SetMyOwner(CPC* pc);
	public: void CPCClientUpdater::Init(void);
	public: void CPCClientUpdater::SetAccountID(int AccountID);
	public: void CPCClientUpdater::SetCharacterID(int CharacterID);
	public: void CPCClientUpdater::SetAccountName(const char* buf);
	public: void CPCClientUpdater::SetCharacterName(const char* buf);
	public: void CPCClientUpdater::SetAuthCode(int AuthCode);
	public: void CPCClientUpdater::SetSendable(int isActive);
	public: void CPCClientUpdater::InitPosition(int xPos, int yPos, unsigned char dir);
	public: void CPCClientUpdater::SetIndex(int index);
	public: int CPCClientUpdater::IsMyArea(CCharacter* other, int xRange, int yRange);
	public: int CPCClientUpdater::IsMyArea(CCharacter* other, int Range);
	public: int CPCClientUpdater::AddSectionMgr(void);
	public: void CPCClientUpdater::RemoveSectionMgr(void);
	//public: void CPCClientUpdater::SaveCharUsingTime();
	//public: int CPCClientUpdater::IsNeighborhood(int, int, int, int, int *, int *);
	public: int CPCClientUpdater::MapMove(const char* mapName, short xPos, short yPos, unsigned long NAID, int type);
	private: int CPCClientUpdater::MapMove_SameServer(const char* in_TargetMapName, short in_TargetXPos, short in_TargetYPos);
	private: int CPCClientUpdater::MapMove_OtherServer(const int in_TargetSvrID, const char* in_TargetMapName, short in_TargetXPos, short in_TargetYPos, const unsigned long in_NAID);
	private: bool CPCClientUpdater::MapMove_OtherServer_Part1(const unsigned long in_NAID, const int in_TargetSvrID);
	public: void CPCClientUpdater::MapMove_OtherServer_Part2(const unsigned long in_NAID, const int in_TargetSvrID);
	public: void CPCClientUpdater::OnDead(unsigned long enemyAID);
	//public: void CPCClientUpdater::PCDataMoveToPVP();
	public: unsigned long CPCClientUpdater::GetAccountID(void);
	public: unsigned long CPCClientUpdater::GetCharacterID(void);
	public: void CPCClientUpdater::SetParameterPointValue(void);
	//public: int CPCClientUpdater::GetAuthCode();
	//public: int CPCClientUpdater::GetErrorCount();
	public: void CPCClientUpdater::NotifyParameter(unsigned short type, int count);
	public: int CPCClientUpdater::GetParPointValue(char value);
	public: void CPCClientUpdater::ReStart(unsigned long NAID);
	public: int CPCClientUpdater::IsSendable(void);
	//public: void CPCClientUpdater::NotifyDisconnect();
	public: int CPCClientUpdater::GetSPHealVelocity(void);
	public: int CPCClientUpdater::GetHPHealVelocity(void);
	//public: unsigned char CPCClientUpdater::GetStatusUpgradeCost(unsigned long);
	public: void CPCClientUpdater::StopMove(void);
	public: void CPCClientUpdater::NotifyStopMove();
	//public: void CPCClientUpdater::NotifyStatuePlusInfo();
	public: void CPCClientUpdater::ReleaseEffectState(void);
	//public: void CPCClientUpdater::CatchInfo(unsigned long);
	//public: void CPCClientUpdater::CatchInfoRemove(unsigned long);
	//public: void CPCClientUpdater::RestartAtCampBase(unsigned long);
	private: void CPCClientUpdater::UpdateCharacter(mystd::vector<CCharacter*>* section);
	private: void CPCClientUpdater::OnDialog(int par1, int par2, int par3);
	private: void CPCClientUpdater::OnWaitDialog(int par1);
	private: void CPCClientUpdater::OnCloseDialog(int par1);
	private: void CPCClientUpdater::OnProgress(unsigned long color, unsigned long time);
	private: void CPCClientUpdater::OnPorgressCancel(void); //TYPO
	private: void CPCClientUpdater::OnMenuList(int par1, int par2, int par3);
	private: void CPCClientUpdater::NotifyLongParameter(unsigned short varID, int amount);
	private: void CPCClientUpdater::NotifyBan(unsigned long errorCode, int type);
	//private: int CPCClientUpdater::UpdateState(unsigned char, unsigned char);
	//private: void CPCClientUpdater::IncreaseJobPoint(short);
	//private: void CPCClientUpdater::IncreaseSkillPoint(short);
	private: void CPCClientUpdater::ReqStatus(void);
	private: void CPCClientUpdater::NotifyUpdateInfo(CPC* other);
	//private: void CPCClientUpdater::NotifyMoveToNeighborCharacter();
	//private: void CPCClientUpdater::Pause(unsigned long);
	//private: void CPCClientUpdater::Reset();
	private: void CPCClientUpdater::OnWhisper(int par1, short len, char* buf);
	private: void CPCClientUpdater::OnWhisperAck(unsigned char result);
	private: void CPCClientUpdater::OnUserCount(int par1);
	private: void CPCClientUpdater::OnChat(CCharacter* character, int par1, char* buf);
	private: void CPCClientUpdater::NotifyStatusParameter(unsigned long type, int defaultValue, int plusValue);
	//private: void CPCClientUpdater::NotifyRankingInfo(CPC *);
	private: void CPCClientUpdater::NotifySpiritsInfo(CPC* other);
	private: void CPCClientUpdater::NotifySpriteChange(CPC* other, int type, int value);
	//private: void CPCClientUpdater::AckStatusToGM(CPC *);
	private: void CPCClientUpdater::NotifyBattleFieldCampInfo(CPC* other);
	//private: void CPCClientUpdater::BroadcastHP();
	//private: void CPCClientUpdater::NotifyMillenniumShieldInfo(CPC *, short);
	//private: void CPCClientUpdater::NotifyForceOfVanguardInfo(CPC *, short);
	//private: void CPCClientUpdater::NotifyOptionalInfo(CPC *, int);

private:
	static hook_method<void (CPCClientUpdater::*)(CPC* pc)> CPCClientUpdater::_SetMyOwner;
	static hook_method<void (CPCClientUpdater::*)(void)> CPCClientUpdater::_Init;
	static hook_method<void (CPCClientUpdater::*)(int AccountID)> CPCClientUpdater::_SetAccountID;
	static hook_method<void (CPCClientUpdater::*)(int CharacterID)> CPCClientUpdater::_SetCharacterID;
	static hook_method<void (CPCClientUpdater::*)(const char* buf)> CPCClientUpdater::_SetAccountName;
	static hook_method<void (CPCClientUpdater::*)(const char* buf)> CPCClientUpdater::_SetCharacterName;
	static hook_method<void (CPCClientUpdater::*)(int AuthCode)> CPCClientUpdater::_SetAuthCode;
	static hook_method<void (CPCClientUpdater::*)(int isActive)> CPCClientUpdater::_SetSendable;
	static hook_method<void (CPCClientUpdater::*)(int xPos, int yPos, unsigned char dir)> CPCClientUpdater::_InitPosition;
	static hook_method<void (CPCClientUpdater::*)(int index)> CPCClientUpdater::_SetIndex;
	static hook_method<int (CPCClientUpdater::*)(CCharacter* other, int xRange, int yRange)> CPCClientUpdater::_IsMyArea;
	static hook_method<int (CPCClientUpdater::*)(CCharacter* other, int Range)> CPCClientUpdater::_IsMyArea2;
	static hook_method<int (CPCClientUpdater::*)(void)> CPCClientUpdater::_AddSectionMgr;
	static hook_method<void (CPCClientUpdater::*)(void)> CPCClientUpdater::_RemoveSectionMgr;
	static hook_method<int (CPCClientUpdater::*)(const char* mapName, short xPos, short yPos, unsigned long NAID, int type)> CPCClientUpdater::_MapMove;
	static hook_method<int (CPCClientUpdater::*)(const char* in_TargetMapName, short in_TargetXPos, short in_TargetYPos)> CPCClientUpdater::_MapMove_SameServer;
	static hook_method<int (CPCClientUpdater::*)(const int in_TargetSvrID, const char* in_TargetMapName, short in_TargetXPos, short in_TargetYPos, const unsigned long in_NAID)> CPCClientUpdater::_MapMove_OtherServer;
	static hook_method<bool (CPCClientUpdater::*)(const unsigned long in_NAID, const int in_TargetSvrID)> CPCClientUpdater::_MapMove_OtherServer_Part1;
	static hook_method<void (CPCClientUpdater::*)(const unsigned long in_NAID, const int in_TargetSvrID)> CPCClientUpdater::_MapMove_OtherServer_Part2;
	static hook_method<void (CPCClientUpdater::*)(unsigned long enemyAID)> CPCClientUpdater::_OnDead;
	static hook_method<unsigned long (CPCClientUpdater::*)(void)> CPCClientUpdater::_GetAccountID;
	static hook_method<unsigned long (CPCClientUpdater::*)(void)> CPCClientUpdater::_GetCharacterID;
	static hook_method<void (CPCClientUpdater::*)(void)> CPCClientUpdater::_SetParameterPointValue;
	static hook_method<void (CPCClientUpdater::*)(unsigned short type, int count)> CPCClientUpdater::_NotifyParameter;
	static hook_method<int (CPCClientUpdater::*)(char value)> CPCClientUpdater::_GetParPointValue;
	static hook_method<void (CPCClientUpdater::*)(unsigned long NAID)> CPCClientUpdater::_ReStart;
	static hook_method<void (CPCClientUpdater::*)(void)> CPCClientUpdater::_ReqStatus;
	static hook_method<void (CPCClientUpdater::*)(CPC* other)> CPCClientUpdater::_NotifyUpdateInfo;
	static hook_method<void (CPCClientUpdater::*)(int par1, short len, char* buf)> CPCClientUpdater::_OnWhisper;
	static hook_method<void (CPCClientUpdater::*)(unsigned char result)> CPCClientUpdater::_OnWhisperAck;
	static hook_method<void (CPCClientUpdater::*)(int par1)> CPCClientUpdater::_OnUserCount;
	static hook_method<void (CPCClientUpdater::*)(CCharacter* character, int par1, char* buf)> CPCClientUpdater::_OnChat;
	static hook_method<int (CPCClientUpdater::*)(void)> CPCClientUpdater::_IsSendable;
	static hook_method<int (CPCClientUpdater::*)(void)> CPCClientUpdater::_GetSPHealVelocity;
	static hook_method<int (CPCClientUpdater::*)(void)> CPCClientUpdater::_GetHPHealVelocity;
	static hook_method<void (CPCClientUpdater::*)(void)> CPCClientUpdater::_StopMove;
	static hook_method<void (CPCClientUpdater::*)()> CPCClientUpdater::_NotifyStopMove;
	static hook_method<void (CPCClientUpdater::*)(void)> CPCClientUpdater::_ReleaseEffectState;
	static hook_method<void (CPCClientUpdater::*)(mystd::vector<CCharacter*>* section)> CPCClientUpdater::_UpdateCharacter;
	static hook_method<void (CPCClientUpdater::*)(int par1, int par2, int par3)> CPCClientUpdater::_OnDialog;
	static hook_method<void (CPCClientUpdater::*)(int par1)> CPCClientUpdater::_OnWaitDialog;
	static hook_method<void (CPCClientUpdater::*)(int par1)> CPCClientUpdater::_OnCloseDialog;
	static hook_method<void (CPCClientUpdater::*)(unsigned long color, unsigned long time)> CPCClientUpdater::_OnProgress;
	static hook_method<void (CPCClientUpdater::*)(void)> CPCClientUpdater::_OnPorgressCancel;
	static hook_method<void (CPCClientUpdater::*)(int par1, int par2, int par3)> CPCClientUpdater::_OnMenuList;
	static hook_method<void (CPCClientUpdater::*)(unsigned short varID, int amount)> CPCClientUpdater::_NotifyLongParameter;
	static hook_method<void (CPCClientUpdater::*)(unsigned long errorCode, int type)> CPCClientUpdater::_NotifyBan;
	static hook_method<void (CPCClientUpdater::*)(unsigned long type, int defaultValue, int plusValue)> CPCClientUpdater::_NotifyStatusParameter;
	static hook_method<void (CPCClientUpdater::*)(CPC* other)> CPCClientUpdater::_NotifySpiritsInfo;
	static hook_method<void (CPCClientUpdater::*)(CPC* other, int type, int value)> CPCClientUpdater::_NotifySpriteChange;
	static hook_method<void (CPCClientUpdater::*)(CPC* other)> CPCClientUpdater::_NotifyBattleFieldCampInfo;

	friend class CPC;
	friend class CPCPacketHandler;
};
